/*-------------------------------------------------------------------------
 *
 * md5.h
 *	  与 MD5 相关的常量和常用工具。
 *
 * 这些定义是前端和后端代码需要的，以处理 MD5 加密的密码。
 *
 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/common/md5.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef PG_MD5_H
#define PG_MD5_H

/* MD5 计算生成的结果大小 */
#define MD5_DIGEST_LENGTH 16
/* MD5 的块大小 */
#define MD5_BLOCK_SIZE	64

/* 与密码相关的数据 */
#define MD5_PASSWD_CHARSET	"0123456789abcdef"
#define MD5_PASSWD_LEN	35

#ifdef FDD
extern bool bytesToHexs(uint8 *str, int strLen, char *dest, int destlen);
extern bool HexTobytes(char *str, int strLen, uint8 *dest, int destlen);
extern bool fdb_md5_hash(const void *buff, size_t len, char *hexsum);
extern bool fdb_md5_binary(const void *buff, size_t len, void *outbuf);
#endif //FDD

/* 所有 MD5 实现的共用工具，来自 md5_common.c */
extern bool pg_md5_hash(const void *buff, size_t len, char *hexsum,
						const char **errstr);
extern bool pg_md5_binary(const void *buff, size_t len, void *outbuf,
						  const char **errstr);
extern bool pg_md5_encrypt(const char *passwd, const char *salt,
						   size_t salt_len, char *buf,
						   const char **errstr);

#endif							/* PG_MD5_H */
